#include<cstdio>
#include<cstring>

using namespace std;

const int maxn=40;

int p[maxn],b[maxn];
int n=30,count=0;
int x[maxn],y[maxn],a[maxn][maxn],l[10][10];

int abs(int x)
{
	if(x<0)return -x;
	return x;
}

void swap(int &x,int &y)
{
	int t=x;
	x=y;
	y=t;
}

void LUP()
{
	for(int i=1;i<=n;i++)p[i]=i;
	int kk;
	for(int k=1;k<=n;k++)
	{
		int t=0;
		for(int i=k;i<=n;i++)
			if(abs(a[i][k])>t)
			{
				t=abs(a[i][k]);
				kk=i;
			}

		swap(p[k],p[kk]);
		for(int i=1;i<=n;i++)
			swap(a[k][i],a[kk][i]);
		for(int i=k+1;i<=n;i++)
		{
			a[i][k]=a[i][k]/a[k][k];
			for(int j=k+1;j<=n;j++)
				a[i][j]=a[i][j]-a[i][k]*a[k][j];
		}
	}
}

void solve()
{
	count++;
	LUP();
	for(int i=1;i<=n;i++)
	{
		y[i]=b[(int)p[i]];
		for(int j=1;j<=i-1;j++)
			y[i]-=a[i][j]*y[j];
	}
	for(int i=n;i>=1;i--)
	{
		x[i]=y[i];
		for(int j=i+1;j<=n;j++)
			x[i]-=a[i][j]*x[j];
		x[i]/=a[i][i];
	}
	printf("PUZZLE #%d\n",count);
	for(int i=1;i<=5;i++)
	{
		for(int j=1;j<=5;j++)
			printf("%d ",abs(x[(i-1)*6+j])%2);
		printf("%d\n",abs(x[i*6])%2);
	}
}

int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		memset(a,0,sizeof(a));
		for(int i=1;i<=5;i++)
			for(int j=1;j<=6;j++)
				scanf("%d",&l[i][j]);
		for(int i=1;i<=30;i++)
		{
			a[i][i]=1;
			if(i-6>0)a[i][i-6]=1;
			a[i][i-1]=a[i][i+1]=a[i][i+6]=1;
			b[i]=l[(i-1)/6+1][(i-1)%6+1];
		}
		solve();

	}
}

